import io from "@hyoga/uni-socket.io";
import {Base64} from 'js-base64';
import global from "./global";
import way from "./way";
import store from '../store'
import {unreadChatRecord} from "../api/api";

let socket = null;
let msgIndex = -1;
/**
 * 聊天方法文件
 */
export default {
  /**
   * socket 建立连接
   */
  connect(){
    socket = io('127.0.0.1', {transports: [ 'websocket', 'polling' ]});
    console.log(socket);
    // 监听连接
    socket.on('connect', () => {
      // ws连接已建立，此时可以进行socket.io的事件监听或者数据发送操作
      // 连接建立后，本插件的功能已完成，接下来的操作参考socket.io官方客户端文档即可
      console.log('ws 已连接');
      const userInfo = {
        user_id: global.user_id
      }
      // 连接成功需要登录
      socket.emit('chatLogin', Base64.encode(JSON.stringify(userInfo)));
      // 监听登录
      socket.on('login', (res) => {
        let data = JSON.parse(Base64.decode(res));
        if(data.code === 200){
          this.connectInit();
        }else {
          way.toast(data.msg);
        }
      })
    });
    socket.on('error', (res) => {
      console.log(res);
    });
  },
  /**
   * 初始化连接
   */
  connectInit(){
    // socket.io 唯一连接id，可以监控这个id实现点对点通讯
    const { id } = socket;
    socket.on(id, (res) => {
      let data = JSON.parse(Base64.decode(res));
      console.log('ws 收到服务器消息：', data);
      // 消息存入vuex chat里
      store.commit('setChatList',data);
      store.commit('setChatData',data);
      // 消息发送成功清除index
      msgIndex = -1;
    });
    // 成功消息
    socket.on('success', (res) => {
      let data = JSON.parse(Base64.decode(res));
      console.log(data,'成功消息');
      // 不接受读取消息状态
      if(data.code !== 202){
        // 放入索引
        data.data.index = msgIndex;
        store.commit('setChatBackData',data);
      }
      // 消息发送成功清除index
      msgIndex = -1;
    });
    // 失败监听
    socket.on('error', (res) => {
      let data = JSON.parse(Base64.decode(res));
      console.log('ws error', data);
      if(data.code === -100){
        way.toast(data.message);
        return;
      }
    });
  },
  /**
   * socket 断开链接
   */
  disconnect(){
    socket.disconnect();
  },
  /**
   * 发送消息
   * @param type
   * @param data
   */
  send(type = 'chatSend',data){
    if(msgIndex === -1){
      msgIndex = data.index;
      socket.emit(type, Base64.encode(JSON.stringify(data)));
    }
  },
  /**
   * 获取未读消息
   */
  getUnreadMessage(){
    unreadChatRecord({

    }).then(res =>{
      for (let i = 0; i < res.data.length; i++) {
        store.commit('setChatList',res.data[i]);
      }
      store.commit('setCountMsg',res.data.length);
    })
  }
}
